// 这是订单模块。包含有state、types、actions、reducer等内容
import {createSelector} from 'reselect' 
// createSelector这个包的作用是为了解决Selector的性能问题，只有依赖的数据变化时才会执行函数，其他模块数据更新，这个函数不执行，以此提高性能

// 初始化state
const initState = {
  info: {
    name: 'Tom',
    age: 18
  }
}

// 统一处理action的类型
const types = {
  CHANGEAGE: 'CHANGEAGE',
  CHANGENAME: 'CHANGENAME'
}

// 统一生成action
export const actions = {
  changeAge: (age)=>({type: types.CHANGEAGE, age: age}),
  changeName: (name)=>({type: types.CHANGENAME, name: name})
}

// 统一管理这个模块的数据(性能较差，任何一个模块的修改都会触发其他所有模块的更新)
export const getInfo = (state) => {
  return state.user.info
}
export const getShowInfo = createSelector(
  [getInfo],
  ()=>{
    console.log('我是user，我执行了');
    return getInfo
  }
)
// 修改state中的数据
const reducer = (state=initState, action)=> {
  switch (action.type) {
    case types.CHANGEAGE:
      return {
        ...state,
        info: {
          name: state.info.name,
          age: action.age
        }
      }
    case types.CHANGENAME:
      return {
        ...state,
        info: {
          name: action.name,
          age: state.info.age
        }
      }
    default:
      return state
  }
}

export default reducer